home *** CD-ROM | disk | FTP | other *** search
- #include "khoopic.h"
- #include <conio.h>
- void KH_OOPic::terminate()
- {
- if(kbhit())
- {
- getch();
- if(kbhit())
- getch();
- serror(23);
- }
- }
- ///////////////////
- void KH_OOPic::show()
- {
- Window::show(); // Show window
- ::setfillstyle(SOLID_FILL, WHITE);
- ::bar(user_screen());
- if(program != NULL) // If program is loaded
- {
- rect r = user_screen(); // Set clip area
- setviewport(r.origin.X, r.origin.Y, r.corner.X, r.corner.Y, 1);
- basic(program); // Run program
- setviewport(0, 0, getmaxx(), getmaxy(), 1); // Restore clip area
- }
- }
- ///////////////////
- void KH_OOPic::get_event()
- {
- char* s1 = "X: ";
- char* s2 = "Y: ";
- while(1)
- {
- ::get_event(2);
- if(e.what == MOUSEEVENT)
- {
- loc wh = e.where() - user_screen().origin;
- itoa((long)(wh.X) * 100 / zoom.X + lt.X, s1 + 2, 10);
- itoa((long)(wh.Y) * 100 / zoom.Y + lt.Y, s2 + 2, 10);
- struct textsettingstype textinfo;
- gettextsettings(&textinfo);
- int c = getcolor();
- struct fillsettingstype fillinfo;
- getfillsettings (&fillinfo);
- ::setfillstyle(SOLID_FILL, BLUE);
- ::settextjustify(LEFT_TEXT, TOP_TEXT);
-
- ::bar(560, 2, 640, 32);
- ::setcolor(WHITE);
-
- ::settextstyle(0, 0, 1);
- ::outtextxy(562, 2, s1);
- ::outtextxy(562, 14, s2);
- ::settextstyle(textinfo.font, textinfo.direction, textinfo.charsize);
- ::settextjustify(textinfo.horiz, textinfo.vert);
- ::setfillstyle(fillinfo.pattern, fillinfo.color);
- ::setcolor(c);
- }
- if(e.what == KEYEVENT || (e.what == MOUSEEVENT && e.mouse1()))
- break;
- }
- }
- ///////////////////
- void KH_OOPic::exe(int act)
- {
- e.what = act ? KEYEVENT : NOEVENT; // act or user input
-
- switch(act)
- {
- case AC_LEFT: e.key = EVENT_LEFT; break;
- case AC_RIGHT: e.key = EVENT_RIGHT; break;
- case AC_UP: e.key = EVENT_UP; break;
- case AC_DOWN: e.key = EVENT_DN; break;
- case AC_PG_UP: e.key = EVENT_PG_UP; break;
- case AC_PG_DN: e.key = EVENT_PG_DN; break;
- case AC_CTRL_PG_UP: e.key = EVENT_CTRL_PG_UP; break;
- case AC_SET: e.key = EVENT_F9; break;
- case AC_CANCEL: e.key = (isRet(RET_REMOVE))
- ? EVENT_ALT_F3 : EVENT_ESC;
- break;
- case AC_OK: e.key = EVENT_F2; break;
- }
- mouseHideCursor();
- if(!act)
- hilite();
-
- int on = 0;
- mouseShowCursor();
- rect r = user_screen();
- while(1)
- {
- mouseShowCursor();
- if(!act && !(e.what == MOUSEEVENT && !on)) // Get user-produced event
- get_event(); // or process "act" message
- else
- on = 1;
- mouseHideCursor();
-
- if(e.what == KEYEVENT)
- {
- switch(e.key)
- {
- case EVENT_F1: global_i[0] = action_type; return;
- case EVENT_RIGHT: lt.X += 8; break;
- case EVENT_LEFT: lt.X = lt.X < 8 ? 0 : lt.X - 8; break;
- case EVENT_UP: lt.Y = lt.Y < 8 ? 0 : lt.Y - 8; break;
- case EVENT_DN: lt.Y += 8; break;
- case EVENT_HOME: lt.X = 0; break;
- case EVENT_PG_UP:
- lt.Y = lt.Y < r.height() ? 0 : r.height(); break;
- case EVENT_END: lt.X += r.width(); break;
- case EVENT_PG_DN: lt.Y += r.height(); break;
- case EVENT_CTRL_PG_UP: lt.Y = 0; break;
- case EVENT_F9: break; // run
- case EVENT_ESC: global_num = 0;
- global_i[0] = AC_NULL; return;
- case EVENT_F6:
- case EVENT_F10:
- case EVENT_TAB:
- case EVENT_ALT_F3:
- case EVENT_ALT_F4:
- case EVENT_ALT_TAB:
- unhilite(); global_num = 1;
- global_i[0] = 0; return;
- case EVENT_F2:
- case EVENT_RETURN : unhilite(); global_num = 1;
- global_i[0] = action_type; return;
- }
- if(program != NULL) // If program is loaded
- {
- ::setfillstyle(SOLID_FILL, WHITE);
- ::bar(user_screen());
- setviewport(r.origin.X, r.origin.Y, r.corner.X, r.corner.Y, 1);
- basic(program); // Run program
- setviewport(0, 0, getmaxx(), getmaxy(), 1); // Restore clip area
- }
- }
- else
- {
- if(!mouse_in(e.where())) // Mouse pressed outside
- {
- unhilite();
- global_num = 0; global_i[0] = AC_NULL;
- return;
- }
- }
- if(act) // leave object and return to the object which calls it
- { // after single processing of "act" command
- global_num = 1;
- return;
- }
- }
- }
- //////////////
- /*
- void main()
- {
- if(!init_KNOW_HOW())
- return;
- setfillstyle(SOLID_FILL, pColorSet->colors.BAK_COLOR);
- bar(0, 0, getmaxx(), getmaxy());
-
- KH_OOPic s(rect(10, 0, 60, 24));
-
- s.show();
- s.set_program(s.load_program("work.bas"));
- s.show();
- s.exe();
-
- close_KNOW_HOW();
- closegraph();
- }
- */